package com.iot.utils;

public class ElectronicFenceUtil {
    /**
     * 地球半径(米)
     */
    private static final double EARTH_RADIUS = 6378137.0;

    /**
     * 计算是否在圆内
     * @param lat1 圆的纬度
     * @param lng1 圆的经度
     * @param radius 半径
     * @param lat 点的纬度
     * @param lng 点的经度
     * @return: boolean true:在圆内,false:在圆外
     */
    public static boolean isInCircle(double lat1, double lng1,double radius, double lat,double lng) {
        double dLat = (lat1 - lat) * Math.PI / 180;
        double dLng = (lng1 - lng) * Math.PI / 180;

        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(lat * Math.PI / 180) * Math.cos(lat1 * Math.PI / 180) * Math.sin(dLng / 2) * Math.sin(dLng / 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
        double d = EARTH_RADIUS * c;
        double dis = Math.round(d);

        return dis > radius;
    }

    public static void main(String[] args) {
        System.out.println(isInCircle(22.680054D, 113.875098D, 1291D, 22.66027D, 114.089415));
    }
}
